package com.cskaoyan.javase.oop2._1extends._10final._3variable._1local;

/**
 * 局部变量可用的修饰符非常少,final就是其中之一
 * 局部变量被final修饰表示局部常量,除了取值不变,其余仍然是一个局部变量.
 *
 * 以方法中的局部变量为例,方法中的局部位置有两个:
 *      1.方法体,表示在方法体的下面不可修改取值
 *      2.形参列表,表示参数一旦传入方法,就不可更改了
 *
 * @since 11:16
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        final int num = 100;
        // Cannot assign a value to final variable 'num'
        // num = 200;
        test(100);
        int a = 10;
        test(a);

        final Student s = new Student(18);
        // s引用是常量,不能指向新的对象了
        // s = new Student(81);
        // 但是对象的状态仍然可以改变
        s.age = 81;

        // final不能用于修饰匿名对象
        // final new Student(28);
    }

    public static void test(final int a) {
        final int num = 100;
        // num = 100;
        // num++;
        System.out.println(num);
        System.out.println(a);
        // Cannot assign a value to final variable 'a'
        // a++;
    }
}

class Student {
    int age;

    public Student(int age) {
        this.age = age;
    }
}
